a20f7753f3f66069b716eb0d4fea28364ecb77f2,tests/frontend/org/voltdb/regressionsuites/TestAdHocPlannerCache.java,TestAdHocPlannerCache,testAdvancedBadParameters,#,366
Before Change
client.callProcedure("R1.insert", 1, "foo1", 0, 1.1);
client.callProcedure("R1.insert", 2, "foo2", 0, 2.2);
client.callProcedure("R1.insert", 3, "foo3", 1, 3.3);
// UNION
// parameters in both
sql = "SELECT ID FROM R1 B WHERE B.ID > ? UNION SELECT ID FROM R1 C WHERE C.ID > ?;";
vt = client.callProcedure("@AdHoc", sql, 0, 0).getResults()[0];
assertEquals(3, vt.getRowCount());
checkPlannerCache(client, CACHE_MISS1);
verifyAdHocFails(client, String.format(pattern, 2, 1), sql, 0);
checkPlannerCache(client, CACHE_MISS1);
vt = client.callProcedure("@AdHoc", sql, 1, 2).getResults()[0];
assertEquals(2, vt.getRowCount());
checkPlannerCache(client, CACHE_HIT2);
verifyAdHocFails(client, String.format(pattern, 2, 3), sql, 0, 1, 2);
checkPlannerCache(client, CACHE_MISS1);
// parameters on right
sql = "SELECT ID FROM R1 B WHERE NUM = 0 UNION SELECT ID FROM R1 C WHERE C.ID < ?;";
verifyAdHocFails(client, String.format(pattern, 1, 0), sql);
checkPlannerCache(client, CACHE_MISS1);
verifyAdHocFails(client, String.format(pattern, 1, 2), sql, 0, 0);
checkPlannerCache(client, CACHE_MISS1);
vt = client.callProcedure("@AdHoc", sql, 2).getResults()[0];
assertEquals(2, vt.getRowCount());
checkPlannerCache(client, CACHE_MISS1);
vt = client.callProcedure("@AdHoc", sql, 3).getResults()[0];
assertEquals(2, vt.getRowCount());
checkPlannerCache(client, CACHE_HIT2);
// parameters on left
sql = "SELECT ID FROM R1 B WHERE NUM > ? UNION SELECT ID FROM R1 C WHERE C.ID > 1;";
vt = client.callProcedure("@AdHoc", sql, 0).getResults()[0];
assertEquals(2, vt.getRowCount());
checkPlannerCache(client, CACHE_MISS1);
vt = client.callProcedure("@AdHoc", sql, -1).getResults()[0];
assertEquals(3, vt.getRowCount());
checkPlannerCache(client, CACHE_HIT2);
verifyAdHocFails(client, String.format(pattern, 1, 2), sql, 0, 0);
checkPlannerCache(client, CACHE_MISS1);
verifyAdHocFails(client, String.format(pattern, 1, 0), sql);
checkPlannerCache(client, CACHE_MISS1);
//
// Subquery should not make a difference here, but add some tests to make sure at least
After Change
checkPlannerCache(client, CACHE_MISS1);
}
public void subtest4AdvancedBadParameters(Client client) throws IOException, ProcCallException {
System.out.println("subtest4AdvancedBadParameters...");
String sql;
VoltTable vt;
// UNION
// parameters in both
sql = "SELECT ID FROM R1 sub4_B WHERE ID > ? UNION SELECT ID FROM R1 sub4_C WHERE ID > ?;";
vt = client.callProcedure("@AdHoc", sql, 0, 0).getResults()[0];
assertEquals(3, vt.getRowCount());
checkPlannerCache(client, CACHE_MISS2);
verifyAdHocFails(client, String.format(pattern, 2, 1), sql, 0);
checkPlannerCache(client, CACHE_PARAMS_EXCEPTION);
vt = client.callProcedure("@AdHoc", sql, 1, 2).getResults()[0];
assertEquals(2, vt.getRowCount());
checkPlannerCache(client, CACHE_HIT2);
verifyAdHocFails(client, String.format(pattern, 2, 3), sql, 0, 1, 2);
checkPlannerCache(client, CACHE_PARAMS_EXCEPTION);
// parameters on right
sql = "SELECT ID FROM R1 sub4_B WHERE NUM = 0 UNION SELECT ID FROM R1 sub4_C WHERE ID < ?;";
verifyAdHocFails(client, String.format(pattern, 1, 0), sql);
checkPlannerCache(client, CACHE_PARAMS_EXCEPTION);
verifyAdHocFails(client, String.format(pattern, 1, 2), sql, 0, 0);
checkPlannerCache(client, CACHE_PARAMS_EXCEPTION);
vt = client.callProcedure("@AdHoc", sql, 2).getResults()[0];
assertEquals(2, vt.getRowCount());
checkPlannerCache(client, CACHE_MISS2);
vt = client.callProcedure("@AdHoc", sql, 3).getResults()[0];
assertEquals(2, vt.getRowCount());
checkPlannerCache(client, CACHE_HIT2);
// parameters on left
sql = "SELECT ID FROM R1 sub4_B WHERE NUM > ? UNION SELECT ID FROM R1 sub4_C WHERE ID > 1;";
vt = client.callProcedure("@AdHoc", sql, 0).getResults()[0];
assertEquals(2, vt.getRowCount());
checkPlannerCache(client, CACHE_MISS2);
vt = client.callProcedure("@AdHoc", sql, -1).getResults()[0];
assertEquals(3, vt.getRowCount());
checkPlannerCache(client, CACHE_HIT2);
verifyAdHocFails(client, String.format(pattern, 1, 2), sql, 0, 0);
checkPlannerCache(client, CACHE_PARAMS_EXCEPTION);
verifyAdHocFails(client, String.format(pattern, 1, 0), sql);
checkPlannerCache(client, CACHE_PARAMS_EXCEPTION);
//
// Subquery should not make a difference here, but add some tests to make sure at least
//
// IN subquery
sql = "SELECT ID FROM R1 sub4 WHERE ID > ? and ID IN (SELECT ID FROM R1 where id > ?) order by ID;";
vt = client.callProcedure("@AdHoc", sql, 1, 2).getResults()[0];
validateTableOfScalarLongs(vt, new long[]{3});
checkPlannerCache(client, CACHE_MISS2);
vt = client.callProcedure("@AdHoc", sql, 0, 1).getResults()[0];
validateTableOfScalarLongs(vt, new long[]{2, 3});